| Author | Manuela Ruiz (mruiz@lcc.uma.es) |
This class represents the current LabelledShape, that is, the design
| edges | list of edges |
| points_and_materials | list of pairs (point, material) |
Initializes the current labelled shape (the design), adding the edges and the points to the layer 0
# File lib/geometry.rb, line 2363
2363: def initialize(edges, points_and_materials)
2364:
2365: if Shade.using_sketchup
2366: @s = Hash.new(nil)
2367: Sketchup.active_model.layers.each { |layer|
2368: @s[layer.name] = BalancedBinaryTree.new
2369: }
2370: @p = Hash.new(nil)
2371: Sketchup.active_model.layers.each { |layer|
2372: @p[layer.name] = LinearLinkedList.new
2373: }
2374: else
2375: @s = Hash.new(nil)
2376: @s["Layer0"] = BalancedBinaryTree.new
2377: @p = Hash.new(nil)
2378: @p["Layer0"] = LinearLinkedList.new
2379: end
2380:
2381: super(edges, points_and_materials)
2382:
2383: @pi = Hash.new(nil)
2384: if Shade.using_sketchup
2385: Sketchup.active_model.layers.each { |layer|
2386: @pi[layer.name] = PiList.new
2387: }
2388: else
2389: @pi["Layer0"] = PiList.new
2390: end
2391:
2392: @p["Layer0"].reset_iterator
2393: i =0
2394: while (n=@p["Layer0"].get_next)
2395: cardinality = n.list.size
2396: node = LinearLinkedListNode.new(cardinality, i, nil)
2397: #So the indexes (i) are sorted by ascending order of the cardinalities
2398: @pi["Layer0"].insert_node(node)
2399: i+=1
2400: end
2401:
2402: @group = Hash.new(nil)
2403: end
| other_shape | another LabelledShape |
| returns | true iff this shape and the specified one are identical |
# File lib/geometry.rb, line 2555
2555: def ==(other_shape)
2556: result = true
2557: if (other_shape.kind_of? CurrentLabelledShape)
2558: @p.keys.each { |layer_name|
2559: result = (result && ((@s[layer_name] == other_shape.s[layer_name])&&(@p[layer_name] == other_shape.p[layer_name])))
2560: }
2561: else
2562: result = false
2563: end
2564: return result
2565: end
| returns | a new CurrentLabelledShape object identical to this one |
# File lib/geometry.rb, line 2568
2568: def clone()
2569: new_shape = CurrentLabelledShape.new(Array.new, Array.new)
2570:
2571: @s.each_key { |layer_name|
2572: new_shape.s[layer_name] = @s[layer_name].clone
2573: }
2574: @p.each_key { |layer_name|
2575: new_shape.p[layer_name] = @p[layer_name].clone
2576: }
2577:
2578: new_shape.create_pi
2579:
2580: return new_shape
2581: end
Creates the permutation for ordering the labelled point list
# File lib/geometry.rb, line 2406
2406: def create_pi()
2407: @p.keys.each {|layer_name|
2408: @pi[layer_name] = PiList.new
2409: @p[layer_name].reset_iterator
2410: i =0
2411: while (n=@p[layer_name].get_next)
2412: cardinality = n.list.size
2413: node = LinearLinkedListNode.new(cardinality, i, nil)
2414: #So the indexes (i) are sorted by ascending order of the cardinalities
2415: @pi[layer_name].insert_node(node)
2416: i+=1
2417: end
2418: #puts "pi size: #{@pi[layer_name].size}"
2419: }
2420: end
Erases the shape
# File lib/geometry.rb, line 2431
2431: def erase()
2432: if Shade.using_sketchup
2433: Sketchup.active_model.layers.each {|layer|
2434: if (@group[layer.name] and !@group[layer.name].deleted?)
2435: Sketchup.active_model.entities.erase_entities @group[layer.name]
2436: end
2437: }
2438: @group = Hash.new(nil)
2439: end
2440: end
| show_labels | true if the labels are to be shown in the canvas; false otherwise |
| layer | SketchUp Layer object that is to be painted |
Paints the view of the shape
# File lib/geometry.rb, line 2447
2447: def paint(show_labels = true, layer = nil)
2448: if Shade.using_sketchup
2449: entities = Sketchup.active_model.entities
2450:
2451: if !layer
2452: erase
2453: @s.each_key {|layer_name|
2454: @group[layer_name] = entities.add_group
2455:
2456: @s[layer_name].reset_iterator
2457: while (node = @s[layer_name].get_next)
2458: node.list.reset_iterator
2459: while (segment_node = node.list.get_next)
2460: @group[layer_name].entities.add_line segment_node.key.tail.point, segment_node.key.head.point
2461: end
2462: end
2463:
2464: if show_labels
2465: @p[layer_name].reset_iterator
2466: while (node = @p[layer_name].get_next)
2467: label = node.key
2468: node.list.reset_iterator
2469: while (labelled_point_node = node.list.get_next)
2470: if !(label.value==Constants::INTERSECTION_LABEL) #The label is a coloured circle
2471: label_group = @group[layer_name].entities.add_group
2472:
2473: # Add circle
2474: edges = label_group.entities.add_circle labelled_point_node.key.point, Constants::LABEL_VECTOR, Shade.label_radius
2475: #Add construction point in order to locate the center later
2476: label_group.entities.add_cpoint labelled_point_node.key.point
2477: #Add face
2478: face = label_group.entities.add_face edges
2479:
2480: #Give color to the face
2481: label_group.material = label.value
2482: end
2483: end
2484: end
2485: end
2486:
2487: #Find or create the layer
2488: found = false
2489: layer = nil
2490: i = 0
2491: while (!found and (i < Sketchup.active_model.layers.length))
2492: if (Sketchup.active_model.layers[i].name == layer_name)
2493: found = true
2494: layer = Sketchup.active_model.layers[i]
2495: end
2496: i+=1
2497: end
2498: if !found
2499: layer = Sketchup.active_model.layers.add(layer_name)
2500: # Draw vertical line
2501: point1 = Constants::PTS_V[0].clone
2502: point2 = Constants::PTS_V[1].clone
2503: v_group = Sketchup.active_model.entities.add_group
2504: v_group.entities.add_line point1,point2
2505: v_group.layer = layer
2506: end
2507: @group[layer_name].layer = layer
2508:
2509: @group[layer_name].transformation = Constants::AXIOM_T
2510: }
2511: else
2512: @group[layer.name] = entities.add_group
2513:
2514: @group[layer.name].layer = layer
2515:
2516: @s[layer.name].reset_iterator
2517: while (node = @s[layer.name].get_next)
2518: node.list.reset_iterator
2519: while (segment_node = node.list.get_next)
2520: @group[layer.name].entities.add_line segment_node.key.tail.point, segment_node.key.head.point
2521: end
2522: end
2523:
2524: if show_labels
2525: @p[layer.name].reset_iterator
2526: while (node = @p[layer.name].get_next)
2527: label = node.key
2528: node.list.reset_iterator
2529: while (labelled_point_node = node.list.get_next)
2530: if !(label.value==Constants::INTERSECTION_LABEL) #The label is a coloured circle
2531: label_group = @group[layer.name].entities.add_group
2532:
2533: # Add circle
2534: edges = label_group.entities.add_circle labelled_point_node.key.point, Constants::LABEL_VECTOR, Shade.label_radius
2535: #Add construction point in order to locate the center later
2536: label_group.entities.add_cpoint labelled_point_node.key.point
2537: #Add face
2538: face = label_group.entities.add_face edges
2539:
2540: #Give color to the face
2541: label_group.material = label.value
2542: end
2543: end
2544: end
2545: end
2546:
2547: @group[layer.name].transformation = Constants::AXIOM_T
2548: end
2549: end
2550: end
| show_labels | true if the labels are to be shown in the canvas; false otherwise |
Refreshes the view of the shape, in case it has been changed
# File lib/geometry.rb, line 2424
2424: def refresh(show_labels = true)
2425: if Shade.using_sketchup
2426: paint(show_labels)
2427: end
2428: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.